import axios from 'axios';

// 创建 axios 实例
const api = axios.create({
  baseURL: import.meta.env.VITE_API_URL,
  timeout: 60000, // 较长的超时时间，因为视频处理可能需要较长时间
  headers: {
    'Content-Type': 'application/json',
  }
});

// 请求拦截器
api.interceptors.request.use(
  config => {
    // 如果请求数据是 FormData 类型，让浏览器自动设置 Content-Type 和 boundary
    if (config.data instanceof FormData) {
      delete config.headers['Content-Type'];
    }
    
    // 这里可以添加认证信息等
    return config;
  },
  error => {
    return Promise.reject(error);
  }
);

// 响应拦截器
api.interceptors.response.use(
  response => {
    return response.data;
  },
  error => {
    // 统一处理错误
    console.error('API 请求错误:', error);
    return Promise.reject(error);
  }
);

// 扩展 API 方法，支持自定义 headers
const apiService = {
  // 基本 HTTP 方法，支持自定义 headers
  get: (url, params, headers = {}) => {
    return api.get(url, { 
      params,
      headers: { ...api.defaults.headers, ...headers }
    });
  },
  
  post: (url, data, headers = {}) => {
    return api.post(url, data, { 
      headers: { ...api.defaults.headers, ...headers }
    });
  },
  
  put: (url, data, headers = {}) => {
    return api.put(url, data, { 
      headers: { ...api.defaults.headers, ...headers }
    });
  },
  
  delete: (url, params, headers = {}) => {
    return api.delete(url, { 
      params,
      headers: { ...api.defaults.headers, ...headers }
    });
  },
  
  // 特定内容类型的便捷方法
  
  // 表单数据 (multipart/form-data)
  postFormData: (url, formData) => {
    // 对于 FormData，让浏览器自动设置 Content-Type
    return api.post(url, formData, {
      headers: {
        'Content-Type': 'multipart/form-data'
      }
    });
  },
  
  // 常规表单 (application/x-www-form-urlencoded)
  postForm: (url, data) => {
    const formData = new URLSearchParams();
    Object.keys(data).forEach(key => {
      formData.append(key, data[key]);
    });
    
    return api.post(url, formData, {
      headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
      }
    });
  },
  
  // 原始实例，用于高级定制
  axios: api
};

export default apiService;